package com.zhouheng.springbootdesignpattern.decoratorpattern;

/**
 * 测试装饰者模式
 * 1.使用具体的装饰者，内部一定要赋值一个具体被装饰的对象或具体的装饰者
 * 2.装饰者之间可以无限装饰下去，但是最初的装饰者内部一定要赋值一个具体被装饰的对象
 *
 * @author 周恒
 * @date 20190614 11:33:24
 * @since v1.0
 */
public class Test {

    public static void main(String[] args) {
        Man man = new Man();
        man.eat();
        //男人在吃饭

        ManDecoratorA md1 = new ManDecoratorA();
        ManDecoratorB md2 = new ManDecoratorB();

        //一、最初的装饰者，内部一定要赋值一个装饰对象
        md1.setIPerson(man);
        md1.eat();
        //男人在吃
        //再吃一顿饭
        //ManDecoratorA类

        //二、后面的装饰者，可以直接装饰其他装饰者
        md2.setIPerson(md1);
        md2.eat();

        // 吃前洗手
        // 男人在吃
        // 再吃一顿饭
        // ManDecoratorA类
        // ManDecoratorB类

        //三、同ManDecoratorA，ManDecoratorB，还可以创建更多的装饰对象，不断扩展，不断变换排列组合下去

    }

}
